/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nextel.project.pedido;

import com.mot.iden.util.StringTokenizer;
import com.nextel.gui.gauge.FrmGaugeProcesar;
import com.nextel.gui.gauge.Procesar;
import com.nextel.project.Configuracion;
import com.nextel.project.agps.ControlAgps;
import com.nextel.project.agps.PropertiesMovil;
import com.nextel.project.cliente.ControlCliente;
import com.nextel.project.dao.HttpControl;
import com.nextel.project.dao.XMLDAO;
import com.nextel.project.pedido.bean.ArticuloBean;
import com.nextel.project.pedido.bean.ArticuloPorCodigoBean;
import com.nextel.project.pedido.bean.ArticuloPorNombreBean;
import com.nextel.project.pedido.bean.PedidoBean;
import com.nextel.project.pedido.bean.PedidoCantidadBean;
import com.nextel.project.pedido.bean.PedidoDetalleBean;
import com.nextel.project.pedido.bean.PedidoReporteBean;
import com.nextel.project.pedido.mvc.MVCCondicionPedido;
import com.nextel.project.pedido.mvc.MVCNoPedidoFin;
import com.nextel.project.pedido.mvc.MVCNoPedidoLista;
import com.nextel.project.pedido.mvc.MVCPedidoFin;
import com.nextel.project.pedido.mvc.MVCPedidoObservacion;
import com.nextel.project.pedido.mvc.MVCProductoBusqueda;
import com.nextel.project.pedido.mvc.MVCProductoDetalle;
import com.nextel.project.pedido.mvc.MVCProductoPedido;
import com.nextel.project.pedido.mvc.MVCProductoResultado;
import com.nextel.project.pedido.rms.RMSArticulo;
import com.nextel.project.pedido.rms.RMSArticuloPorCodigo;
import com.nextel.project.pedido.rms.RMSArticuloPorNombre;
import com.nextel.project.pedido.rms.RMSKPI;
import com.nextel.project.pedido.rms.RMSPedido;
import com.nextel.project.reporte.bean.ReporteKPIBean;
import com.nextel.project.reporte.mvc.MVCReporte;
import com.nextel.project.reporte.mvc.MVCReporteKPI;
import com.nextel.project.usuario.ControlUsuario;
import pe.com.nextel.main.ControlBase;
import java.util.Calendar;
import javax.microedition.io.HttpConnection;
import org.kxml2.io.KXmlParser;
import pe.com.nextel.http.HttpSimple;
import pe.com.nextel.idioma.IdiomaManager;
import pe.com.nextel.util.Fecha;
import pe.com.nextel.util.Iterator;
import pe.com.nextel.util.List;
import pe.com.nextel.util.StringUtils;
import pe.com.nextel.util.math.MathUtil;
import com.nextel.project.stock.ControlStock;
import java.io.InputStream;

/**
 *
 *  
 */
public class ControlPedido extends ControlBase implements Procesar {

    private static final ControlPedido control = new ControlPedido();
    //current
    public PedidoBean currentPedido;
    public PedidoDetalleBean currentPedidoDetalle;
    //public PedidoDetalleBean currentPedidoStock;
    public ReporteKPIBean currentKPI = new ReporteKPIBean();
    public List currentCabeceras;
    //public ArticuloBean currentArticuloStock;
    // rms
    public final RMSArticulo rmsArticulo = new RMSArticulo();
    public final RMSArticuloPorCodigo rmsArticuloPorCodigo = new RMSArticuloPorCodigo();
    public final RMSArticuloPorNombre rmsArticuloPorNombre = new RMSArticuloPorNombre();
    public final RMSKPI rmsKPI = new RMSKPI();
    public final RMSPedido rmsPedido = new RMSPedido();
    //mvc
    public final MVCCondicionPedido mvcCondicionPedido = new MVCCondicionPedido();
    public final MVCNoPedidoFin mvcNoPedidoFin = new MVCNoPedidoFin();
    public final MVCNoPedidoLista mvcNoPedidoLista = new MVCNoPedidoLista();
    public final MVCPedidoFin mvcPedidoFin = new MVCPedidoFin();
    public final MVCPedidoObservacion mvcPedidoObservacion = new MVCPedidoObservacion();
    public final MVCProductoBusqueda mvcProductoBusqueda = new MVCProductoBusqueda();
    public final MVCProductoDetalle mvcProductoDetalle = new MVCProductoDetalle();
    public final MVCProductoPedido mvcProductoPedido = new MVCProductoPedido();
    public final MVCProductoResultado mvcProductoResultado = new MVCProductoResultado();
    public final MVCReporteKPI mvcReporteKPI = new MVCReporteKPI();
    public final MVCReporte mvcReporte = new MVCReporte();
//    public final MVCPedidoOnline mvcPedidoOnline = new MVCPedidoOnline();
//    public final MVCPedidoDetalleOnline mvcPedidoDetalleOnline = new MVCPedidoDetalleOnline();
    //public final  BarsCanvas mvcGrafico = new BarsCanvas();
    public PedidoReporteBean currentPedidoReporte;
    public Thread threadBusqueda;
    private byte busquedaMVC = 1;
    private String motivo;

    /**
     * metodo de acceso para instanciar los recordStored
     */
    /**
     * para no crear mas instancias
     */
    private ControlPedido() {
    }

    public static ControlPedido getInstance() {
        return control;
    }

    public void joinThreadBusqueda() {
        try {
            if (threadBusqueda != null && threadBusqueda.isAlive()) {
                threadBusqueda.join();
            }
        } catch (Exception e) {
        }
    }

    public void procesarKpi() {
        try {

            currentKPI = rmsKPI.obtenerKPI();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*****************************************************************************/
    /********************LOGICA DE NEGOCIO **************************************/
    /*****************************************************************************/
    public void iniciarPedido(byte i) {

        try {
            // limpiamos las transacciones del pedido anterior si hubiere

            limpiarMemoriaTransacciones();
            //creamos el pedido
            currentPedido = new PedidoBean(ControlUsuario.getInstance().currentUsuario, ControlCliente.getInstance().currentCliente);

            if (ControlCliente.getInstance().currentCliente != null) {
                currentPedido.setCodigoCliente(ControlCliente.getInstance().currentCliente.getCodigo());
            }

            currentPedido.setFechaInicio(Fecha.getDate().getTime());


            if ("1".equals(ControlUsuario.getInstance().currentUsuario.gps)) {
                if (ControlAgps.getInstance().currentGPS != null) {
                    currentPedido.latitud = ControlAgps.getInstance().currentGPS.getLatitude();
                    currentPedido.longitud = ControlAgps.getInstance().currentGPS.getLongitude();
                }
            }
//            if ("1".equals(ControlUsuario.getInstance().currentUsuario.eficiencia)) {
            currentKPI.tiempoInicioTemporal = Calendar.getInstance().getTime().getTime();
//            }

            if (i == PedidoBean.TIPO_PEDIDO) {
//                System.out.println("-->condicion");

                setCurrent(mvcCondicionPedido);
            } else {
                ControlPedido.getInstance().mvcNoPedidoLista.setBusquedaMVC(ControlPedido.getInstance().getBusquedaMVC());
                setCurrent(mvcNoPedidoLista);
            }
        } catch (Exception e) {
            e.printStackTrace();
            showError("Error : " + e, ControlCliente.getInstance().mvcClienteBusqueda.showScreen());
        }
    }

    public List getListPedidoPorCliente() {
        try {
            return rmsPedido.getListaPedidoPorCliente(ControlCliente.getInstance().currentCliente);
        } catch (Exception e) {
            e.printStackTrace();
            showError("Error" + e, ControlCliente.getInstance().mvcClienteDetalle.showScreen());
        }
        return null;
    }

    public List getPedidosPendientes() {
        try {
            return rmsPedido.getPedidosPendientesEnvio();
        } catch (Exception e) {
            e.printStackTrace();
            showError("Error" + e, ControlCliente.getInstance().mvcClienteDetalle.showScreen());
        }
        return null;
    }

    public int getNumeroPedidoPendientes() {

        int total = 0;
        try {
            List lst = getPedidosPendientes();
            if ((lst != null) && (lst.size() >= 0)) {
                total = lst.size();
            }

        } catch (Exception e) {
            e.printStackTrace();
            total = 0;
        }

        return total;

    }

    public void modificarPedido() {

        currentPedidoDetalle = (null);
        setCurrent(mvcProductoPedido);
    }

    /*********************************************************************************/
    /**********************  ARTICULO  ***********************************************/
    /*********************************************************************************/
    public PedidoDetalleBean getArticulo(ArticuloPorNombreBean articuloPorNombre) {
        //#debug
        //System.out.println("Midlet.getArticulo");

        try {
            ArticuloBean articulo = (ArticuloBean) rmsArticulo.getObject(articuloPorNombre.getIdRecordArticulo(), articuloPorNombre.getPosRecordArticulo());

            if (existeArticulo(articulo.getCodigo())) {
                ControlPedido.getInstance().showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO_EXISTE_PEDIDO), ControlPedido.getInstance().mvcProductoPedido.showScreen());//"El Art\u00EDculo ya existe en el Pedido"

                return null;
            }

            PedidoDetalleBean dpedido = new PedidoDetalleBean();

            dpedido.setCodigoArticulo(articulo.getCodigo());

            dpedido.setNombreArticulo(articulo.getNombre());
            dpedido.setStockArticulo(articulo.getStock());
//            dpedido.setStockArticuloDB(articulo.getStock());
            dpedido.setPrecioBase(articulo.getPrecioCanal(ControlCliente.getInstance().currentCliente.getTcli_cod()));

            if (dpedido.getPrecioBase() == null || "".equals(dpedido.getPrecioBase())) {
                mvcProductoBusqueda.setBusquedaMVC(busquedaMVC);
                showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO_NO_PRECIO) + dpedido.getCodigoArticulo(), mvcProductoBusqueda.showScreen());//No tiene Precio el Art\u00EDculo

                dpedido = null;
            }

            currentPedidoDetalle = (dpedido);
            return dpedido;
        } catch (Exception e) {
            e.printStackTrace();
            mvcProductoBusqueda.setBusquedaMVC(busquedaMVC);
            showError("Error" + e, mvcProductoBusqueda.showScreen());
        }
        return null;
    }

    public boolean existeArticulo(String codigo) {
        Iterator it = ControlPedido.getInstance().currentPedido.getLstPedidoDetalle().iterator();
        while (it.hasNext()) {
            String codArtDev = ((PedidoDetalleBean) it.next()).getCodigoArticulo();
            if (codigo.equals(codArtDev)) {
                return true;
            }
        }
        return false;
    }

    public PedidoDetalleBean buscarPorCodigoProducto(String codigo) {
        //#debug ARGENTINA
        System.out.println("Midlet.buscarPorCodigoProducto" + codigo);



//        long time1 = System.currentTimeMillis();
        try {
            ArticuloPorCodigoBean articuloPorcodigo = rmsArticuloPorCodigo.buscarArticulo(codigo);

            if (articuloPorcodigo != null) {

                List lst = rmsArticulo.getAllBean();

                ArticuloBean articulo = (ArticuloBean) rmsArticulo.getObject(articuloPorcodigo.getIdRecordArticulo(), articuloPorcodigo.getPosRecordArticulo());

                //long time4 = System.currentTimeMillis();
//                System.out.println("time3=" + (time4 - time3) );


                PedidoDetalleBean dpedido = new PedidoDetalleBean();

                dpedido.setCodigoArticulo(articulo.getCodigo());
                dpedido.setNombreArticulo(articulo.getNombre());
                dpedido.setStockArticulo(articulo.getStock());

                dpedido.setPrecioBase(articulo.getPrecioCanal(ControlCliente.getInstance().currentCliente.getTcli_cod()));

                if (dpedido.getPrecioBase() == null || "".equals(dpedido.getPrecioBase())) {
                    showError(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO_NO_PRECIO_ASIGNADO) + " - " + dpedido.getCodigoArticulo(), mvcProductoPedido.getScreen());//El art\u00EDculo no tiene precio asignado

                    dpedido.clear();
                    dpedido = null;
                }

                return dpedido;
            } else {
                //System.out.println("articulo no existe");
                showError(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO) + " " + codigo + " " + IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOEXISTE), mvcProductoPedido.getScreen());//El Art\u00EDculo  ; NO Existe

                return null;
            }
        } catch (Exception e) {
            showError("Error : " + e, mvcProductoPedido.showScreen());
        }
        return null;
    }

    public void agregarProductoXBusquedaStock(String codigo, String stock) {
        //#debug
        //System.out.println("Midlet.agregarProductoXBusquedaStock  codigo | stock" + codigo + " | " + stock);


//        long time1 = System.currentTimeMillis();
        try {
            ArticuloPorCodigoBean articuloPorcodigo = rmsArticuloPorCodigo.buscarArticulo(codigo);

            if (articuloPorcodigo != null) {

                List lst = rmsArticulo.getAllBean();

                ArticuloBean articulo = (ArticuloBean) rmsArticulo.getObject(articuloPorcodigo.getIdRecordArticulo(), articuloPorcodigo.getPosRecordArticulo());

                articulo.setIdRecodset(articuloPorcodigo.getIdRecordArticulo());
                articulo.setPosicionID(articuloPorcodigo.getPosRecordArticulo());

                // long time4 = System.currentTimeMillis();
//                System.out.println("time3=" + (time4 - time3) );

                // actualizamos el articulo ingresamos el stock obtenido por la Web
                articulo.setStock(stock); // colocamos el stock obteenido en linea

                rmsArticulo.actualizarArticulo(articulo);

                PedidoDetalleBean dpedido = new PedidoDetalleBean();
                dpedido.setCodigoArticulo(articulo.getCodigo());
                dpedido.setNombreArticulo(articulo.getNombre());
                dpedido.setStockArticulo(stock); // se coloca el stock capturado en l

                dpedido.setPrecioBase(articulo.getPrecioCanal(ControlCliente.getInstance().currentCliente.getTcli_cod()));

                if (dpedido.getPrecioBase() == null || "".equals(dpedido.getPrecioBase())) {
                    showError(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO_NO_PRECIO_ASIGNADO) + " - " + dpedido.getCodigoArticulo(), ControlStock.getInstance().mvcStock.showScreen());//El art\u00EDculo no tiene precio asignado

                    dpedido.clear();
                    dpedido = null;

                } else {
                    ControlPedido.getInstance().currentPedidoDetalle = dpedido;
                    // agregamos el pedido detalle al pedido
                    ControlPedido.getInstance().currentPedido.setDetallePedido(ControlPedido.getInstance().currentPedidoDetalle);

                    // colocar busquedaMVC de stock
                    mvcProductoResultado.setBusquedaMVC(ControlStock.getInstance().getBusquedaMVCLinea());
                    mvcProductoDetalle.setBusquedaMVC(ControlStock.getInstance().getBusquedaMVCLinea());
                    setCurrent(mvcProductoDetalle);
                }


            //return dpedido;
            } else {
                //System.out.println("articulo no existe");
                showError(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO) + " " + codigo + " " + IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOEXISTE), ControlStock.getInstance().mvcStock.showScreen());//El Art\u00EDculo  ; NO Existe

            //return null;
            }
        } catch (Exception e) {
            showError("Error : " + e, ControlStock.getInstance().mvcStock.showScreen());
        }
    //return null;
    }

    public void agregarProductoNombreXBusquedaStock(String codigo, String stock) {
        //#debug
        //System.out.println("Midlet.agregarProductoNombreXBusquedaStock  codigo | stock" + codigo + " | " + stock);


//        long time1 = System.currentTimeMillis();
        try {
            ArticuloPorCodigoBean articuloPorcodigo = rmsArticuloPorCodigo.buscarArticulo(codigo);

            if (articuloPorcodigo != null) {

                List lst = rmsArticulo.getAllBean();

                ArticuloBean articulo = (ArticuloBean) rmsArticulo.getObject(articuloPorcodigo.getIdRecordArticulo(), articuloPorcodigo.getPosRecordArticulo());

                articulo.setIdRecodset(articuloPorcodigo.getIdRecordArticulo());
                articulo.setPosicionID(articuloPorcodigo.getPosRecordArticulo());

                // long time4 = System.currentTimeMillis();
//                System.out.println("time3=" + (time4 - time3) );

                // actualizamos el articulo ingresamos el stock obtenido por la Web
                articulo.setStock(stock); // colocamos el stock obteenido en linea

                rmsArticulo.actualizarArticulo(articulo);

                PedidoDetalleBean dpedido = new PedidoDetalleBean();
                dpedido.setCodigoArticulo(articulo.getCodigo());
                dpedido.setNombreArticulo(articulo.getNombre());
                dpedido.setStockArticulo(stock); // se coloca el stock capturado en l

                dpedido.setPrecioBase(articulo.getPrecioCanal(ControlCliente.getInstance().currentCliente.getTcli_cod()));

                if (dpedido.getPrecioBase() == null || "".equals(dpedido.getPrecioBase())) {
                    showError(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO_NO_PRECIO_ASIGNADO) + " - " + dpedido.getCodigoArticulo(), ControlStock.getInstance().mvcStock.showScreen());//El art\u00EDculo no tiene precio asignado

                    dpedido.clear();
                    dpedido = null;

                } else {
                    ControlPedido.getInstance().currentPedidoDetalle = dpedido;
                    // agregamos el pedido detalle al pedido
                    ControlPedido.getInstance().currentPedido.setDetallePedido(ControlPedido.getInstance().currentPedidoDetalle);

                    // colocar busquedaMVC de stock
                    mvcProductoResultado.setBusquedaMVC(ControlStock.getInstance().getBusquedaMVCLinea());
                    mvcProductoDetalle.setBusquedaMVC(ControlStock.getInstance().getBusquedaMVCLinea());
                    setCurrent(mvcProductoDetalle);
                }


            //return dpedido;
            } else {
                //System.out.println("articulo no existe");
                showError(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ARTICULO) + " " + codigo + " " + IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOEXISTE), ControlStock.getInstance().mvcStock.showScreen());//El Art\u00EDculo  ; NO Existe

            //return null;
            }
        } catch (Exception e) {
            showError("Error : " + e, ControlStock.getInstance().mvcStock.showScreen());
        }
    //return null;
    }

    public void setBusquedaMVC() {
        mvcProductoBusqueda.setBusquedaMVC(busquedaMVC);
    }

    public void buscarPorNombreProducto(final String nombre) {
        //#debug
//        System.out.println("Midlet.buscarPorNombreProducto");
        try {
            joinThreadBusqueda();
            mvcProductoResultado.setBusquedaMVC(busquedaMVC);
            setCurrent(mvcProductoResultado);
            threadBusqueda = null;
            threadBusqueda = new Thread() {

                public void run() {
                    try {
                        mvcProductoResultado.setBusquedaMVC(busquedaMVC);
                        rmsArticuloPorNombre.buscarPorNombreArticulos(nombre, mvcProductoResultado);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };

            threadBusqueda.start();

        } catch (Exception e) {
            e.printStackTrace();
            mvcProductoBusqueda.setBusquedaMVC(busquedaMVC);
            showError("Error : " + e, mvcProductoBusqueda.showScreen());
        }
    }

    /*********************************************************************************/
    /**********************  TRANSACCIONES  ***********************************************/
    /*********************************************************************************/
    public void grabarPedido() {

//        System.out.println("Midlet.grabarPedido");
        try {

            if ("1".equals(ControlUsuario.getInstance().currentUsuario.gps)) {
                if (ControlAgps.getInstance().currentGPS != null) {
                    currentPedido.latitud = ControlAgps.getInstance().currentGPS.getLatitude();
                    currentPedido.longitud = ControlAgps.getInstance().currentGPS.getLongitude();
                    currentPedido.celda = ControlAgps.getInstance().currentGPS.isAsistUsada();

                }
            }

            currentPedido.ErrorConexion = PropertiesMovil.errorConexionGPS;
            currentPedido.ErrorPosicion = PropertiesMovil.errorPosicionGPS;

            System.out.println("currentUsuario.gps" + ControlUsuario.getInstance().currentUsuario.gps);
            System.out.println("currentGPS" + ControlAgps.getInstance().currentGPS);

            System.out.println("latitud=" + ControlAgps.getInstance().currentGPS.getLatitude());
            System.out.println("longitud=" + ControlAgps.getInstance().currentGPS.getLongitude());


            //System.out.println("currentKPI.tiempoInicioTemporal= " + currentKPI.tiempoInicioTemporal);
            this.incrementarKpiPedido();
//            }

            //////////////////////////////////////////////////////////////////////////////////////
            //ACTUALIZAMOS EL STOCK DE LOS ARTICULOS INVOLUCRADOS EN EL PEDIDO
            //this.actualizarStock( currentPedido.getLstPedidoDetalle() );
            //////////////////////////////////////////////////////////////////////////////////////

            motivo = currentPedido.getCodigoMotivo();
//            System.out.println("motivo= "+ motivo);
//            System.out.println("Fecha Inicio= " +  currentPedido.getFechaInicio());

            if (motivo != (null) && !("").equals(motivo)) {
                ControlCliente.getInstance().currentCliente.setEstado(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_VISITADO));
            //   System.out.println("java_visitado: "+IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_VISITADO));
            } else {
                ControlCliente.getInstance().currentCliente.setEstado(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CON_PEDIDO));
            // System.out.println("java_con_pedido: "+IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_CON_PEDIDO));
            }


            if (!ControlCliente.getInstance().currentCliente.isEnLinea()) {
                ControlCliente.getInstance().rmsCliente.actualizarObjectLista(ControlCliente.getInstance().currentCliente);
            }


            currentPedido.setFechaFin(Fecha.getDate().getTime());

            //grabamos el pedido y obtenemos el recorset de este y lo guardamos en el cliente
            rmsPedido.grabarPedido(currentPedido);
            // System.out.println("fin del pedido");

            this.enviarPedido();

        } catch (Exception e) {
            e.printStackTrace();
            showError("Error : " + e, ControlCliente.getInstance().mvcClienteDetalle.showScreen());
        }
    }

    public void actualizarStock(List lstDetallePedido) throws Exception {
        ArticuloPorCodigoBean articuloPorcodigo = null;
        ArticuloBean articulo = null;
        PedidoDetalleBean bean = null;

        for (int i = 0; i < lstDetallePedido.size(); i++) {
            bean = (PedidoDetalleBean) lstDetallePedido.get(i);
            articuloPorcodigo = rmsArticuloPorCodigo.buscarArticulo(bean.getCodigoArticulo());
            if (articuloPorcodigo != null) {
                articulo = (ArticuloBean) rmsArticulo.getObject(articuloPorcodigo.getIdRecordArticulo(), articuloPorcodigo.getPosRecordArticulo());
            }

            if (articulo != null) {
                articulo.setStock(bean.getStockArticulo());
            }
        }

        articuloPorcodigo = null;
        articulo = null;
        bean = null;
        System.gc();
    }

    public void enviarPedido() throws Exception {
        System.out.println("enviarPedido");
        if (!StringUtils.withSignal()) {
            showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOCOBERTURA_ENVIO), ControlCliente.getInstance().mvcClienteDetalle.showScreen());          //"Zona sin cobertura, procesar el env\u00EDo mediante la opcion ENVIOS del menu principal"

            return;

        }

        getMensajeHttp().setTipoEnvio(HttpConnection.POST);
//        System.out.println("--------------------------------------");
        getMensajeHttp().setUrl(Configuracion.URL_ENVIO_PEDIDO);
//        System.out.println("--------------------------------------");

        getMensajeHttp().setMensaje(XMLDAO.getInstance().writeXMLPedido(currentPedido).getBytes());

        System.out.println("url =" + Configuracion.URL_ENVIO_PEDIDO);
        System.out.println("mensaje =" + new String(getMensajeHttp().getMensaje()));

        // conectar al servidor
        HttpControl.getInstance().setProceso(HttpControl.getInstance().PRCHTTP_PEDIDO);
        iniciarConexionHTTP();
    }

    public void actualizarPedido(InputStream in) {
        try {

            XMLDAO.getInstance().parseMensajeXML(in);

            limpiarMemoriaTransacciones();


            if ((motivo == null) || (motivo.equals(""))) {
                if (ControlCliente.getInstance().currentCliente != null) {
                    showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_PEDIDO_REGISTRADO), ControlCliente.getInstance().mvcClienteDetalle.showScreen());//"Pedido registrado"

                } else {
                    showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_PEDIDO_REGISTRADO), ControlUsuario.getInstance().mvcMenu.showScreen());//"Pedido registrado"

                }
            } else {
                motivo = "";
                showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOPEDIDO_REGISTRADO), ControlCliente.getInstance().mvcClienteDetalle.showScreen());
            }
        } catch (Exception e) {
            e.printStackTrace();

            if (ControlCliente.getInstance().currentCliente != null) {
                showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOATENDIO_PEDIDO) + ": " + e.getMessage(), ControlCliente.getInstance().mvcClienteDetalle.showScreen());//No se pudo atender el pedido

            } else {
                showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOATENDIO_PEDIDO) + ": " + e.getMessage(), ControlUsuario.getInstance().mvcMenu.showScreen());//No se pudo atender el pedido

            }
        }
    }
    FrmGaugeProcesar frmGaugeProcesar;

    public void enviarPedidoSincronizacion() {
        if (!StringUtils.withSignal()) {
            showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOCOBERTURA_SINCRONIZAR), ControlUsuario.getInstance().mvcMenu.showScreen());//"Zona sin cobertura, No se puede Sicnronizar"

            return;
        }
        frmGaugeProcesar = new FrmGaugeProcesar();

        ControlUsuario.getInstance().setXmlListener(frmGaugeProcesar);
        frmGaugeProcesar.iniciar(this);

    }

    public void realizarProceso() {
        try {


            HttpSimple httpSimple = new HttpSimple();
            enviarPedidoTotal(false);

            //envia el pedido
            httpSimple.mensajeHttp = getMensajeHttp();
            httpSimple.makeConnection(frmGaugeProcesar, HttpControl.getInstance());

            //sincroniza;
            ControlUsuario.getInstance().sincronizar();
            httpSimple.mensajeHttp = getMensajeHttp();
            httpSimple.makeConnection(frmGaugeProcesar, HttpControl.getInstance());

        } catch (Exception ex) {
            showError("Error: " + ex.getMessage(), ControlUsuario.getInstance().mvcMenu.showScreen());
        }

    }

    public void enviarPedidoTotal(boolean flag) throws Exception {


        if (!StringUtils.withSignal()) {
            //ControlCliente.getInstance().mvcClienteDetalle.showScreen()
            showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_NOCOBERTURA_ENVIO), ControlUsuario.getInstance().mvcEnvio.showScreen());//"Zona sin cobertura, procesar el env\u00EDo mediante la opcion ENVIOS del menu principal"

            return;
        }

        getMensajeHttp().setTipoEnvio(HttpConnection.POST);
        getMensajeHttp().setUrl(Configuracion.URL_ENVIO_PEDIDO);

        getMensajeHttp().setMensaje(XMLDAO.getInstance().writeXMLPedido(rmsPedido.getAllBean()).getBytes());


        System.out.println("url =" + Configuracion.URL_ENVIO_PEDIDO);
        System.out.println("mensaje =" + new String(getMensajeHttp().getMensaje()));
        HttpControl.getInstance().setProceso(HttpControl.getInstance().PRCHTTP_PEDIDOTOTALSYNCRONIZAR);

        // conectar al servidor
        if (flag) {
            HttpControl.getInstance().setProceso(HttpControl.getInstance().PRCHTTP_PEDIDOTOTAL);
            iniciarConexionHTTP();
        }
    }

    public void procesarRespuestaPedidoTotalSyncronizar(InputStream in) throws Exception {

        XMLDAO.getInstance().parseMensajeXML(in);

        limpiarMemoriaTransacciones();

    }

    public void procesarRespuestaPedidoTotal(InputStream in) {
        try {

            System.out.println("ControlPedido.procesarRespuestaPedidoTotal");

            XMLDAO.getInstance().parseMensajeXML(in);

            limpiarMemoriaTransacciones();

            showMensaje(IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_PEDIDO_REGISTRADO), ControlUsuario.getInstance().mvcEnvio.showScreen());//"Pedido registrado"

        } catch (Exception e) {
            showError("Error: " + e.getMessage(), ControlUsuario.getInstance().mvcEnvio.showScreen());
        }
    }

    public void limpiarMemoriaTransacciones() {
        if (currentPedidoDetalle != null) {
            currentPedidoDetalle.clear();
            currentPedidoDetalle = null;
        }

        if (currentPedido != null) {
            currentPedido.clear();
            currentPedido = null;
        }

        System.gc();
    }

    public void limpiarMemoria() {
        currentKPI = null;
        limpiarMemoriaTransacciones();
        System.gc();
    }

    public void eliminarArticulos() throws Exception {
        rmsArticulo.deleteAll();
        rmsArticuloPorCodigo.deleteAll();
        rmsArticuloPorNombre.deleteAll();
    }

    public void eliminarDatos() throws Exception {
        rmsArticulo.deleteAll();
        rmsArticuloPorCodigo.deleteAll();
        rmsArticuloPorNombre.deleteAll();

//        if ("1".equals(ControlUsuario.getInstance().currentUsuario.eficiencia)) {
        rmsKPI.deleteAll();
//        }
        rmsPedido.deleteAll();
    }

//    public BarsCanvas getBarras() {
//
//        mvcGrafico.setTitle("Pedido");
//        mvcGrafico.setTotalCustomers(currentKPI.totalClientes, "Total");
//        mvcGrafico.setTotalCustomersAttended(currentKPI.clienteVisitados, "Atendido");
//        return mvcGrafico;
//    }
    private boolean clienteExistePedido(String cod) {
        boolean rpta = false;
        StringTokenizer str = new StringTokenizer(currentKPI.listaCodigoClientes, '|');
        while (str.hasMoreElements()) {

            String elem = String.valueOf(str.nextElement());
            if (cod.equals(elem)) {
                rpta = true;
            }
        }
        return rpta;
    }

    private boolean clienteExisteNoPedido(String cod) {
        boolean rpta = false;
        StringTokenizer str = new StringTokenizer(currentKPI.listaCodigoClienteNoPedido, '|');
        while (str.hasMoreElements()) {

            String elem = String.valueOf(str.nextElement());
            if (cod.equals(elem)) {
                rpta = true;
            }
        }
        return rpta;
    }

    public void incrementarKpiPedido() throws Exception {
//        if ("1".equals(ControlUsuario.getInstance().currentUsuario.eficiencia)) {
        // contabilizamos los kpi
        if ((currentPedido != null) && (currentPedido.getIdRecodset() <= 0)) {

            String codCli = currentPedido.getCodigoCliente();
            currentKPI.cantidadPedida = MathUtil.sumar(currentKPI.cantidadPedida, currentPedido.calcularCantidadTotal());
            currentKPI.montoTotal = MathUtil.sumar(currentKPI.montoTotal, currentPedido.getMontoTotal());

            if ("".equals(currentPedido.getCodigoMotivo())) //si es pedido
            {
                if (!clienteExistePedido(codCli)) {
                    currentKPI.clienteVisitados = currentKPI.clienteVisitados + 1;
                    currentKPI.listaCodigoClientes += "|" + codCli;

                }
            } else {
                if (!clienteExisteNoPedido(codCli)) {
                    currentKPI.clienteVisitadoNoPedido = currentKPI.clienteVisitadoNoPedido + 1;
                    currentKPI.listaCodigoClienteNoPedido += "|" + codCli;

                }
            }

            if ("".equals(currentPedido.getCodigoMotivo())) //si es pedido
            {
                currentKPI.totPedidos += 1;
            } else {
                currentKPI.totNoPedido += 1;
            }
            //System.out.println("Variabletiempo = " + (Calendar.getInstance().getTime().getTime() - currentKPI.tiempoInicioTemporal));

            currentKPI.tiempoTotal = currentKPI.tiempoTotal + (Calendar.getInstance().getTime().getTime() - currentKPI.tiempoInicioTemporal);
            //System.out.println("currentKPI.tiempoTotal= " + currentKPI.tiempoTotal);
            rmsKPI.guardarKPI(currentKPI);
        }
//        }
    }

//    public void actualizarArticulo(ArticuloBean bean) throws Exception {
//        rmsArticulo.actualizarObjectLista(bean);
//    }
    public void procesarPedidoCantidad() {
        try {

            /*ClienteBean cliente = new ClienteBean();
            cliente.setCodigo(ControlUsuario.getInstance().currentUsuario.getCodigo());
            cliente.setCodEmpresa(ControlUsuario.getInstance().currentUsuario.getCompania());*/

            PedidoCantidadBean pedidoCantidad = new PedidoCantidadBean();

            pedidoCantidad.setcodEmpresa(ControlUsuario.getInstance().currentUsuario.getCompania());
            pedidoCantidad.setcodUsuario(ControlUsuario.getInstance().currentUsuario.getCodigo());
            pedidoCantidad.setFechaMovil(Fecha.getFechaActualCompleta());

            getMensajeHttp().setUrl(Configuracion.URL_PEDIDOCANTIDAD);
            getMensajeHttp().setMensaje(pedidoCantidad.writeXML());
            System.out.println("url =" + Configuracion.URL_PEDIDOCANTIDAD);
            System.out.println("mensaje =" + new String(getMensajeHttp().getMensaje()));

            HttpControl.getInstance().setProceso(HttpControl.getInstance().PRCHTTP_PEDIDOCANTIDAD);

            iniciarConexionHTTP();

        } catch (Exception e) {
            e.printStackTrace();
            showError("Error : " + e, ControlUsuario.getInstance().mvcMenu.showScreen());
        }

    }

    public void procesarPedidoCantidadOnLine(KXmlParser xml) {
        try {

            currentPedidoReporte = XMLDAO.getInstance().parseXMLCantidadPedido(xml);

            setCurrent(ControlUsuario.getInstance().mvcConsolidado);

        } catch (Exception e) {
            showMensaje(e + "", ControlUsuario.getInstance().mvcMenu.showScreen());
        }
    }

    public String obtenerEtiquetaStock(byte mvcProductoDetalle) {
        String resultado;

        // si es igual al de pedido
        if (mvcProductoDetalle == busquedaMVC) {
            resultado = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_STOCK);
        } else // de lo contrario se considera stock en linea
        {
            resultado = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_STOCK_LINEA);
        }

        return resultado;

    }


//    public void buscarPedidoOnline() {
//        try {
//            currentCabeceras = null;
//            ClienteBean cliente = new ClienteBean();
//            cliente.setCodigo(ControlUsuario.getInstance().currentUsuario.getCodigo());
//            System.out.println("ControlUsuario.getInstance().currentUsuario.getCodigo()= " +ControlUsuario.getInstance().currentUsuario.getCodigo());
//            cliente.setCodEmpresa(ControlUsuario.getInstance().currentUsuario.getCompania());
//            
//            getMensajeHttp().setUrl(Configuracion.URL_PEDIDO_ONLINE);
//            getMensajeHttp().setMensaje(cliente.writeXML());
//            System.out.println("url =" + Configuracion.URL_PEDIDO_ONLINE);
//            System.out.println("mensaje =" + new String(getMensajeHttp().getMensaje()));
//
//            HttpControl.getInstance().setProceso(HttpControl.getInstance().PRCHTTP_PEDIDOONLINE);
//
//            iniciarConexionHTTP();
//          
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            showError("Error : " + e, mvcReporteKPI.showScreen());
//
//        }
//    }
/*
    public void procesarPedidoOnline(MensajeHttp mensajeHttp) {
    //        System.out.println("procesarPedidoOnline");
    try {
    ControlCliente.getInstance().limpiarMemoria();
    procesarDataPedidoOnline(mensajeHttp);
    processPedidoOnline();
    
    System.gc();
    } catch (Exception e) {
    e.printStackTrace();
    ControlCliente.getInstance().showMensaje(e + "", mvcReporteKPI.showScreen());
    }
    }
    
    public void procesarDataPedidoOnline(MensajeHttp mensajeHttp) throws Exception {
    //#debug
    //System.out.println("procesarDataPedidoOnline");
    
    InputStream input = mensajeHttp.getInput();
    byte[] bufferData = new byte[5120]; //10240 //5120
    int amountData = 0;
    try {
    RecordStore.deleteRecordStore("RS_PEDIDOONLINE_TMP");
    } catch (RecordStoreException ex) {
    //            System.out.println("not found " + ex.getMessage());
    }
    
    RecordStore rs = null;
    try {
    rs = RecordStore.openRecordStore("RS_PEDIDOONLINE_TMP", true);
    while ((amountData = input.read(bufferData)) != -1) {
    rs.addRecord(bufferData, 0, amountData);
    }
    } catch (RecordStoreException ex) {
    ex.printStackTrace();
    throw ex;
    } catch (IOException ex) {
    ex.printStackTrace();
    throw ex;
    
    } finally {
    try {
    if (rs != null) {
    rs.closeRecordStore();
    rs = null;
    }
    bufferData = null;
    } catch (Exception ex) {
    //  System.out.println("final de error = " + ex.getMessage());
    }
    }
    }
    
    public void processPedidoOnline() throws Exception {
    //#debug
    //        System.out.println("processPedidoOnline");
    
    RecordStore rs = null;
    InputStream input = null;
    try {
    
    rs = RecordStore.openRecordStore("RS_PEDIDOONLINE_TMP", true);
    input = new RecordStoreInputStream(rs);
    guardarCabeceraPedido(input);
    
    } catch (Exception ex) {
    throw ex;
    } finally {
    try {
    if (rs != null) {
    rs.closeRecordStore();
    rs = null;
    }
    if (input != null) {
    input.close();
    input = null;
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    try {
    RecordStore.deleteRecordStore("RS_PEDIDOONLINE_TMP");
    } catch (RecordStoreException e) {
    e.printStackTrace();
    }
    }
    }
    
    public void guardarCabeceraPedido(InputStream input) throws Exception {
    
    DataInputStreamX dataInput = new DataInputStreamX(input);
    //        int recordStoreSize;
    //        int c=0;
    //        int d=0;
    try {
    int i = dataInput.readInt();
    
    if (i <= 0) {
    showMensaje("No hay pedidos registrados para el dia de hoy", mvcReporteKPI.showScreen());
    
    return;
    }
    
    if (currentCabeceras == null) {
    currentCabeceras = new ArrayList();
    }
    
    
    for (int j = 0; j < i; j++) {
    
    PedidoBean bean = new PedidoBean();
    
    
    dataInput.readString();
    
    
    dataInput.readString();
    
    String fechita = dataInput.readString();
    String FechAct = Fecha.getFechaActual();
    String FechHora = FechAct + " " + fechita;
    
    
    bean.setFechaInicio(Fecha.getDateDDMMYYYY(FechAct).getTime());
    
    fechita = dataInput.readString();
    String FechHora1 = FechAct + " " + fechita;
    
    bean.setFechaFin(Fecha.getDateDDMMYYYY(FechAct).getTime());
    
    dataInput.readString();
    
    bean.setCodigoCliente(dataInput.readString());
    
    
    dataInput.readString();
    
    
    bean.setMontoTotal(dataInput.readString());
    
    
    dataInput.readInt();
    
    
    dataInput.readInt();
    
    
    dataInput.readInt();
    
    int numDetalles = dataInput.readInt();
    
    bean.setLstPedidoDetalle(new ArrayList());
    
    
    if(numDetalles > 0){
    
    for (int k = 0; k < numDetalles; k++) {
    
    PedidoDetalleBean detBean = new PedidoDetalleBean();
    
    
    detBean.setCodigoArticulo(dataInput.readString());
    detBean.setNombreArticulo(dataInput.readString());
    
    detBean.setCantidad(dataInput.readString());
    dataInput.readString();
    
    detBean.setMonto(dataInput.readString());
    dataInput.readString();
    dataInput.readString();
    
    bean.getLstPedidoDetalle().add(detBean);
    }
    currentCabeceras.add(bean);
    }
    
    }
    ControlPedido.getInstance().setCurrent(ControlPedido.getInstance().mvcPedidoOnline);
    
    
    } catch (Exception ex) {
    System.out.println(" data terminada: " + ex);
    } finally {
    
    dataInput.close();
    dataInput = null;
    }
    }
    
     */
    public byte getBusquedaMVC() {
        return busquedaMVC;
    }

    public void setBusquedaMVC(byte busquedaMVC) {
        this.busquedaMVC = busquedaMVC;
    }
//    public byte getBusquedaMVCS() {
//        return busquedaMVCS;
//    }
//
//    public void setBusquedaMVCS(byte busquedaMVCS) {
//        this.busquedaMVCS = busquedaMVCS;
//    }
}
